<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>D-SACK：TCP协议的智能优化扩展</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        .card-hover {
            transition: all 0.3s ease;
            border: 1px solid transparent;
        }
        
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            border-color: #667eea;
        }
        
        .section-title {
            position: relative;
            padding-left: 20px;
        }
        
        .section-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 24px;
            background: linear-gradient(to bottom, #667eea, #764ba2);
            border-radius: 2px;
        }
        
        .first-letter {
            float: left;
            font-size: 4rem;
            line-height: 3rem;
            padding-right: 8px;
            margin-top: 3px;
            font-weight: 700;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        
        .feature-icon {
            width: 60px;
            height: 60px;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 12px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            font-size: 24px;
            margin-bottom: 16px;
        }
        
        .timeline-item {
            position: relative;
            padding-left: 40px;
        }
        
        .timeline-item::before {
            content: '';
            position: absolute;
            left: 10px;
            top: 8px;
            width: 12px;
            height: 12px;
            border-radius: 50%;
            background: #667eea;
            box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.2);
        }
        
        .timeline-item::after {
            content: '';
            position: absolute;
            left: 15px;
            top: 20px;
            bottom: -20px;
            width: 2px;
            background: #e5e7eb;
        }
        
        .timeline-item:last-child::after {
            display: none;
        }
        
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        .animate-fadeInUp {
            animation: fadeInUp 0.8s ease-out;
        }
        
        .mermaid {
            display: flex;
            justify-content: center;
            margin: 2rem 0;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="hero-gradient text-white py-20">
        <div class="container mx-auto px-6">
            <div class="max-w-4xl mx-auto text-center animate-fadeInUp">
                <h1 class="text-5xl font-bold mb-6">D-SACK</h1>
                <p class="text-2xl mb-4 font-light">重复选择性确认</p>
                <p class="text-lg opacity-90 leading-relaxed">
                    TCP协议的智能扩展，通过精确识别重复数据包，优化网络传输效率，
                    为高流量和不稳定网络环境提供可靠的数据传输保障
                </p>
            </div>
        </div>
    </section>

    <!-- Main Content -->
    <main class="container mx-auto px-6 py-12 max-w-6xl">
        <!-- Introduction Card -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-12 card-hover">
            <p class="text-gray-700 leading-relaxed text-lg">
                <span class="first-letter">D</span>-SACK（Duplicate Selective Acknowledgements）是 TCP 协议中的一个重要扩展，通过在 ACK 消息中包含重复数据包的信息来优化数据包的处理。它减少了由于重复 ACK 造成的不必要重传，提升了网络传输的效率和可靠性。D-SACK 的引入不仅改善了数据传输的性能，还在高流量和不稳定网络环境中发挥了重要作用。
            </p>
        </div>

        <!-- Background Section -->
        <section class="mb-12">
            <h2 class="text-3xl font-bold mb-8 section-title text-gray-800">
                <i class="fas fa-history mr-3 text-purple-600"></i>背景
            </h2>
            <div class="bg-white rounded-2xl shadow-lg p-8">
                <p class="text-gray-700 leading-relaxed mb-6 text-lg">
                    在 TCP 连接中，数据的可靠传输依赖于确认机制。当接收端收到数据包时，它会向发送端发送一个 ACK（确认）消息，通知其已经成功接收到的数据。当网络出现丢包、延迟或重复数据包时，接收端可能会发送重复的 ACK 消息。
                </p>
                <div class="grid md:grid-cols-2 gap-6">
                    <div class="bg-red-50 rounded-xl p-6 border border-red-200">
                        <div class="flex items-start">
                            <i class="fas fa-exclamation-triangle text-red-500 text-2xl mr-4 mt-1"></i>
                            <div>
                                <h4 class="font-bold text-lg mb-2 text-gray-800">误判数据丢失</h4>
                                <p class="text-gray-700">重复的 ACK 可能使发送端误以为某些数据包丢失了，从而触发不必要的重传。</p>
                            </div>
                        </div>
                    </div>
                    <div class="bg-orange-50 rounded-xl p-6 border border-orange-200">
                        <div class="flex items-start">
                            <i class="fas fa-chart-line text-orange-500 text-2xl mr-4 mt-1"></i>
                            <div>
                                <h4 class="font-bold text-lg mb-2 text-gray-800">降低效率</h4>
                                <p class="text-gray-700">重复的 ACK 消息会导致不必要的网络负担和资源浪费。</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- Working Principle Section -->
        <section class="mb-12">
            <h2 class="text-3xl font-bold mb-8 section-title text-gray-800">
                <i class="fas fa-cogs mr-3 text-purple-600"></i>D-SACK 的工作原理
            </h2>
            <div class="bg-white rounded-2xl shadow-lg p-8">
                <p class="text-gray-700 leading-relaxed mb-8 text-lg">
                    D-SACK 扩展通过增强 ACK 消息来改善重复数据包的处理，具体工作原理如下：
                </p>
                
                <!-- Mermaid Diagram -->
                <div class="bg-gray-50 rounded-xl p-6 mb-8">
                    <div class="mermaid">
                        graph LR
                            A[发送端] -->|数据包| B[网络]
                            B -->|正常/重复| C[接收端]
                            C -->|D-SACK ACK| D[发送端]
                            
                            style A fill:#667eea,stroke:#333,stroke-width:2px,color:#fff
                            style C fill:#764ba2,stroke:#333,stroke-width:2px,color:#fff
                            style B fill:#f3f4f6,stroke:#333,stroke-width:2px
                            style D fill:#667eea,stroke:#333,stroke-width:2px,color:#fff
                    </div>
                </div>

                <div class="space-y-6">
                    <div class="timeline-item">
                        <h4 class="font-bold text-lg mb-3 text-gray-800">
                            <i class="fas fa-tags mr-2 text-purple-600"></i>标记重复数据包
                        </h4>
                        <p class="text-gray-700 leading-relaxed">
                            当接收端检测到重复的数据包时，它会在 ACK 消息中添加 D-SACK 选项。D-SACK 选项中包含重复数据包的序列号，从而明确指出哪些数据包已经收到但被重复接收。
                        </p>
                    </div>
                    
                    <div class="timeline-item">
                        <h4 class="font-bold text-lg mb-3 text-gray-800">
                            <i class="fas fa-envelope-open-text mr-2 text-purple-600"></i>改进 ACK 消息
                        </h4>
                        <p class="text-gray-700 leading-relaxed">
                            在 ACK 消息中，D-SACK 选项提供了更多的信息，指出了接收端已经收到的重复数据包。这允许发送端准确识别哪些数据包是重复的，哪些数据包是新的。
                        </p>
                    </div>
                    
                    <div class="timeline-item">
                        <h4 class="font-bold text-lg mb-3 text-gray-800">
                            <i class="fas fa-sync-alt mr-2 text-purple-600"></i>优化重传策略
                        </h4>
                        <p class="text-gray-700 leading-relaxed">
                            通过 D-SACK 信息，发送端可以判断哪些数据包已经被接收而无需重新传输。这样，发送端能够避免对这些重复的数据包进行不必要的重传，减少了网络的带宽占用和资源消耗。
                        </p>
                    </div>
                </div>
            </div>
        </section>

        <!-- Advantages Section -->
        <section class="mb-12">
            <h2 class="text-3xl font-bold mb-8 section-title text-gray-800">
                <i class="fas fa-star mr-3 text-purple-600"></i>D-SACK 的优势
            </h2>
            <div class="grid md:grid-cols-3 gap-6">
                <div class="bg-white rounded-2xl shadow-lg p-6 card-hover">
                    <div class="feature-icon">
                        <i class="fas fa-ban"></i>
                    </div>
                    <h4 class="font-bold text-xl mb-3 text-gray-800">减少不必要的重传</h4>
                    <p class="text-gray-700 leading-relaxed">
                        D-SACK 明确指出哪些数据包是重复的，避免了发送端误判丢包的情况。通过减少重传，节省了带宽和网络资源，提高了数据传输的效率。
                    </p>
                </div>
                
                <div class="bg-white rounded-2xl shadow-lg p-6 card-hover">
                    <div class="feature-icon">
                        <i class="fas fa-rocket"></i>
                    </div>
                    <h4 class="font-bold text-xl mb-3 text-gray-800">提高网络性能</h4>
                    <p class="text-gray-700 leading-relaxed">
                        通过更精确地识别和处理重复数据包，D-SACK 提高了网络的整体性能。减少了重传的次数，从而降低了网络延迟和拥塞。
                    </p>
                </div>
                
                <div class="bg-white rounded-2xl shadow-lg p-6 card-hover">
                    <div class="feature-icon">
                        <i class="fas fa-shield-alt"></i>
                    </div>
                    <h4 class="font-bold text-xl mb-3 text-gray-800">提升数据传输可靠性</h4>
                    <p class="text-gray-700 leading-relaxed">
                        D-SACK 使得数据传输更加可靠，通过提供详细的 ACK 信息，确保发送端能够更准确地确认数据的接收状态，从而减少了数据丢失的风险。
                    </p>
                </div>
            </div>
        </section>

        <!-- Application Scenarios -->
        <section class="mb-12">
            <h2 class="text-3xl font-bold mb-8 section-title text-gray-800">
                <i class="fas fa-globe mr-3 text-purple-600"></i>实际应用中的效果
            </h2>
            <div class="bg-white rounded-2xl shadow-lg